package com.zh.common.utils

import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.PermissionUtils
import com.gyf.immersionbar.ImmersionBar
import com.gyf.immersionbar.OnKeyboardListener
import com.zh.common.R

/**
 * @auth xiaohua
 * @time 2021/4/23 - 14:16
 * @desc 管理跳转页面、标题颜色
 */
internal interface JumpActivity {

    //可以重写状态栏和导航栏颜色
    // 注：颜色不能使用Color.WHITE设置（报错），必须使用R.color.white
    val statusBarColor: Int get() = defaultStatusBarColor
    val navigationBarColor: Int get() = defaultNavigationBarColor
    val fitsSystemWindows: Boolean get() = true
    val keyboardListener: OnKeyboardListener? get() = null

    //默认状态栏和导航栏颜色
    private val defaultStatusBarColor: Int get() = R.color.color_white
    private val defaultNavigationBarColor: Int get() = R.color.color_white

    /**
     * 沉侵式颜色
     */
    private val setStatusBarColor: List<Int>
        get() = listOf(R.color.color_white)
    private val setNavigationBarColor: List<Int>
        get() = listOf(R.color.color_white)

    /**
     * 沉侵式
     */
    fun initImmersionBars() {
        ActivityUtils.getTopActivity().let {
            ImmersionBar.with(it).apply {
                statusBarColor(statusBarColor) //状态栏颜色
                navigationBarColor(navigationBarColor) //导航栏颜色
                //状态栏为淡色statusBarDarkFont要设置为true
                statusBarDarkFont(setStatusBarColor.contains(statusBarColor)) //状态栏字体是深色，不写默认为亮色
                //导航栏为淡色navigationBarDarkIcon要设置为true
                navigationBarDarkIcon(setNavigationBarColor.contains(navigationBarColor)) //导航栏图标是深色，不写默认为亮色
                keyboardEnable(true) //解决软键盘与底部输入框冲突问题，默认为false
                setOnKeyboardListener(keyboardListener)//键盘显示监听
                fitsSystemWindows(fitsSystemWindows)
                immersionBar(this)
            }.init()
        }
    }

    /**
     * 自定义
     */
    fun immersionBar(immBar: ImmersionBar){

    }

    /**
     * 请求权限
     * @param permission 在PermissionConfig里有示例列出
     * @param callBack 回调
     */
    fun requestPermission(permission: List<String>, callBack: PermissionUtils.SingleCallback) {
        PermissionUtils.permission(*permission.toTypedArray())
            .callback(callBack).request()
    }
}